const COS = require('cos-nodejs-sdk-v5');
const { v4: uuidv4 } = require('uuid');
const multer = require('multer');
const stream = require('stream');
const path = require('path');

// 配置腾讯云对象存储
const cos = new COS({
    SecretId: 'AKID0rar8Icv9B1HYgknuqWBkBRprmeN0jOv', // 腾讯云 SecretId
    SecretKey: 'WwCFBzd8zrhLKG4pnbGkDYlu24vny5GO', // 腾讯云 SecretKey
});

// 配置 multer 的内存存储
const storage = multer.memoryStorage(); // 使用内存存储而不是磁盘存储

const upload = multer({ storage: storage }).single('file');

exports.cosUploadFile = (req, res, next) => {
    try {
        // 使用 multer 中间件处理文件上传
        upload(req, res, (err) => {
            if (err) {
                return res.status(400).json({
                    code: 400,
                    message: '文件上传失败: ' + err.message
                });
            }
            if (!req.file) {
                return res.status(400).json({
                    code: 400,
                    message: '请上传文件'
                });
            }
            const file = req.file;
            const fileName = `${uuidv4()}${path.extname(file.originalname)}`;
            const fileType = file.mimetype;

            // 配置参数
            const params = {
                Bucket: 'miao-1311577355', // 腾讯云存储桶名称
                Region: 'ap-beijing', // 腾讯云存储桶地域
                Key: fileName, // 文件名
                Body: file.buffer, // 直接使用文件缓冲区作为 Body
            };

            // 上传文件
            cos.putObject(params, (err, data) => {
                if (err) {
                    return res.status(500).json({
                        code: 500,
                        message: '文件上传到 COS 失败: ' + err.message
                    });
                } else {
                    return res.status(200).json({
                        code: 200,
                        message: '上传成功',
                        data: {
                            fileUrl: 'https://'+data.Location,
                            fileType: fileType
                        }
                    });
                }
            });
        });
    } catch (error) {
        return res.status(500).json({
            code: 500,
            message: '服务器错误: ' + error.message
        });
    }
};